﻿namespace DataStructure;

public class SeqListStack<E>:IStack<E> 
{
    //动态数组作为底层的数据结构
    private SeqList<E> list;

    //初始化容量为capacity的数组栈
    public SeqListStack(int capacity)
    {
        list = new SeqList<E>(capacity);
    }

    //使用默认容量的数组栈 
    public SeqListStack()
    {
        list = new SeqList<E>();
    }

    //获取栈中元素个数 O（1）
    public int Count => list.Count;

    //判断栈是否为空 O（1）
    public bool IsEmpty => list.IsEmpty;

    //查看栈顶元素 O（1）
    public E peek()
    {
        return list.Last;
    }

    //删除栈顶元素 O（1）
    public E pop()
    {
        return list.RemoveLast();
    }

    //往栈顶添加元素 O（1）
    public void Push(E e)
    {
        list.AddLast(e);
    }

    //清空顺序栈
    public void Clear()
    {
        list.Clear();
    }

    //打印栈信息
    public override string ToString()
    {
        return "Stack: " + list.ToString() + "top";
    }
}

class SeqListStack
{
    static void Main(string[] args)
    {
        SeqListStack<int> stack = new SeqListStack<int>();
        for (int i = 0; i < 5; i++)
        {
            stack.Push(i);
            Console.WriteLine(stack);
        }

        stack.pop();
        Console.WriteLine(stack);

        Console.Read();
    }
}

